/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package escom.ipn.modelo.dao;

import escom.ipn.modelo.dto.Policia_Pie_Tierra;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Daniel
 */
public class Policia_Pie_TierraDAO {
         
    public static final String SQL_SELECT_ALL =
            "SELECT * FROM CAD_DELTA.POLICIA_PIE_TIERRA "
            + "JOIN RADIO_COMUNICACION ON RADIO_COMUNICACION_id_radio=id_radio "
            + "JOIN CAT_ESTADO_RECURSO ON id_estado_recurso=CAT_ESTADO_RECURSO_id_estado_recurso "
            + "JOIN Sector on id_sector=SECTOR_id_sector "
            + "WHERE estado=\"libre\" "
            + "and id_sector=?";
    
    public static final String SQL_SELECT_ALL2 =
            "SELECT * FROM CAD_DELTA.POLICIA_PIE_TIERRA "
            + "            JOIN RADIO_COMUNICACION ON RADIO_COMUNICACION_id_radio=id_radio"
            + "            JOIN CAT_ESTADO_RECURSO ON id_estado_recurso=CAT_ESTADO_RECURSO_id_estado_recurso"
            + "            JOIN Sector on id_sector=SECTOR_id_sector"
            + "            JOIN COORDENADA_INCIDENTE ON INCIDENTE_id_incidente=?"
            + "            JOIN INCIDENTE ON INCIDENTE_id_incidente=id_incidente"
            + "            WHERE estado=\"libre\""
            + "            and id_sector=INCIDENTE.SECTOR_id_SECTOR"
            + "            order by SQRT(POW(COORDENADA_INCIDENTE.longitud-RADIO_COMUNICACION.longitud,2)+POW(COORDENADA_INCIDENTE.latitude-RADIO_COMUNICACION.latitud,2))";
    
    public static final String SQL_SELECT =
            "SELECT * FROM CAD_DELTA.POLICIA_PIE_TIERRA "
            + "WHERE RADIO_COMUNICACION_id_radio= ? ";

    public List loadPoliciasLibres(int s, Connection conn)
            throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(SQL_SELECT_ALL2);
            ps.setInt(1, s);
            rs = ps.executeQuery();
            List resultados = getResults(rs);
            if (resultados.size() > 0) {
                return resultados;
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    public Policia_Pie_Tierra loadPoliciaID(Policia_Pie_Tierra a,Connection conn)
            throws SQLException {
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = conn.prepareStatement(SQL_SELECT);
            ps.setInt(1, a.getRADIO_COMUNICACION_id_radio());
            rs = ps.executeQuery();
            List resultados = getResults(rs);
            if (resultados.size() > 0) {
                return (Policia_Pie_Tierra)resultados.get(0);
            } else {
                return null;
            }
        } finally {
            cerrar(rs);
            cerrar(ps);
            cerrar(conn);
        }
    }
    
    private List getResults(ResultSet rs)
            throws SQLException {
        List results = new ArrayList();
        while (rs.next()) {
            Policia_Pie_Tierra a = new Policia_Pie_Tierra();
            a.setRADIO_COMUNICACION_id_radio(rs.getInt("RADIO_COMUNICACION_id_radio"));
            a.setNombre(rs.getString("POLICIA_PIE_TIERRA.nombre"));
            a.setAp_paterno(rs.getString("POLICIA_PIE_TIERRA.ap_paterno"));
            results.add(a);
        }
        return results;
    }
    
    
    
    
    private void cerrar(Connection cnn) {
        if (cnn != null) {
            try {
                cnn.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }

    private void cerrar(PreparedStatement ps) {
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }

    private void cerrar(ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                //manejo del error
            }
        }
    }
}
